﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using PrimeraAFantasyFootballl.Models;
using System.Web.Mvc;

namespace PrimeraAFantasyFootballl.Controllers
{
    public class JugadorFormViewModel
    {
        //Properties
        public Jugador Jugador { get; private set; }
        //Constructor
        public JugadorFormViewModel(Jugador jugador)
        {
            Jugador = jugador;
        }

    }
      
    public class JugadorController : Controller
    {
        JugadorRepository jugadorrepository = new JugadorRepository();
        
        //
        // GET: /Jugador/

        public ActionResult Index()
        {
            var jugadors = jugadorrepository.FindAllPlayers().ToList();
            return View("Index",jugadors);
            
        }

        //
        // GET: /Jugador/Colo_Colo
        public ActionResult Colo_Colo()
        {
            
            var jugador = jugadorrepository.EncontrarClub("Colo Colo");
            return View("Colo", jugador);
        }

        //
        // GET: /Jugador/Details/5

        public ActionResult Details(int id)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            if(jugador==null)
                return View("NotFound");
            else

            return View("Details",jugador);
                    }
        
        //
        // GET: /Jugador/Verfecha/1

        public ActionResult Verfecha(int id)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            
            if (jugador == null)
                return View("NotFound");
            else

                return View("Verfecha", jugador.Estadisticas);
        }

        
        //
        // GET: /Jugador/Ingresarfecha/1

        public ActionResult Ingresarfecha(int id)
        {
            
            Estadistica est = new Estadistica();
            
            return View("Ingresarfecha", est);
        }

        //
        


        public int CalcularPuntos(Estadistica est, int posicion)
        {
            int puntos=0;
            if (est.MinutosJugados > 60)
                puntos += 3;
            else if (est.MinutosJugados>30)
                puntos += 2;
            else if (est.MinutosJugados!=0)
                puntos += 1;
            else
                return puntos;
            puntos -= 2*est.PenalesErrados;
            puntos += 5*est.PenalesAtajados;
            puntos -= est.TarjetasAmarillas;
            puntos -= est.TarjetasRojas*3;
            puntos += est.Asistencias*3;
            if (posicion == 1 && est.MinutosJugados > 60)
            {
                puntos += est.GolesAnotados * 5;
                if (est.GolesConcedidos == 0)
                    puntos += 5;
            }
            else if (posicion == 2)
            {
                puntos += est.GolesAnotados * 5;
                if (est.GolesConcedidos == 0 && est.MinutosJugados > 60)
                    puntos += 3;
            }
            else if (posicion == 3)
            {
                puntos += est.GolesAnotados * 4;
                if (est.GolesConcedidos == 0 && est.MinutosJugados > 60)
                    puntos += 1;
            }
            else
                puntos += est.GolesAnotados * 3;
            return puntos;
        }



        // POST: /Jugador/Ingresarfecha/1
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Ingresarfecha(int id, FormCollection collection)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            Estadistica est = new Estadistica();
            try
            {
                UpdateModel(est);
                est.Puntos = CalcularPuntos(est, jugador.Posicion);
                UpdateModel(jugador);
                est.JugadorID = jugador.JugadorID;
                jugador.Estadisticas.Add(est);
                jugadorrepository.Save();
                return View("Verfecha",jugador.Estadisticas);
            }
            catch
            {
                foreach (var issue in jugador.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }

                return View(est);
            }

        }

        
      




        //
        // GET: /Jugador/Create

        public ActionResult Create()
        {
            
            return View("Create");
        } 
         //
        // POST: /Jugador/Create

       
        [AcceptVerbs (HttpVerbs.Post) ]
        public ActionResult Create(FormCollection collection)
        {
            Jugador jugador = new Jugador();
            try
            {
                UpdateModel(jugador);
                jugadorrepository.Add(jugador);
                jugadorrepository.Save();
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                foreach (var issue in jugador.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }
                return View(jugador);
            }
        }
        
        //
        // GET: /Jugador/Edit/5
 
        public ActionResult Edit(int id)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            return View(jugador);
        }

        //
        // POST: /Jugador/Edit/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection formValues)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            try
            {
                UpdateModel(jugador);
                jugadorrepository.Save();
                return RedirectToAction("Details", new { id = jugador.JugadorID });
            }
            catch
            {
                foreach (var issue in jugador.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }

                return View(jugador);
            }

        }

        //
        // GET: /Jugador/Delete/5
 
        public ActionResult Delete(int id)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);

                if (jugador == null)
                    return View("NoEncontrado");
                else
                    return View(jugador);
           
        }

        //
        // POST: /Jugador/Delete/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Delete(int id, FormCollection collection)
        {
            Jugador jugador = jugadorrepository.GetJugador(id);
            
                if (jugador == null)
                    return View("NoEncontrado");
                jugadorrepository.Delete(jugador);
                jugadorrepository.Save();
 
                return RedirectToAction("Index");
          
        }
    }
}
